#include <atomic>
#include <iostream>
#include <thread>

/**
 * @brief 使用 acquire/release 内存序实现生产者-消费者同步。
 */
int main() {
  std::atomic<bool> ready{false};
  int data = 0;

  std::thread producer([&]() {
    data = 123;                                       ///< 先写入共享数据。
    ready.store(true, std::memory_order_release);     ///< 发布标志，确保数据对消费者可见。
  });

  std::thread consumer([&]() {
    while (!ready.load(std::memory_order_acquire)) {  ///< 获取标志：等待数据发布。
      std::this_thread::yield();
    }
    std::cout << "acquire/release read: " << data << '\n';  ///< 读取共享数据。
  });

  producer.join();
  consumer.join();
  return 0;
}